package buffbuildergui;

import java.util.ArrayList;

import javax.swing.JOptionPane;

public class InstantAction extends Entity{
    @SuppressWarnings("oracle.jdeveloper.java.nested-assignment")
    public InstantAction() {
        name = "InstantAction";
        
        ArrayList<String> temp = new ArrayList<>();
        ArrayList<String> temp0 = new ArrayList<>();
        Property p = null;
        Property q = null;
        Property r = null;
        Property s = null;
        ArrayList<Property> al = null;
        ArrayList<Property> al0 = null;
        ArrayList<Property> al1 = null;
        temp = new ArrayList<>();
        temp.add("VOID");
        props.add(p=new Property("buffInstantActionType",Property.FINITE,temp,this));
            // VOID
            al = new ArrayList<Property>();
            p.plugs.add(al);

            // =========================================================================================================
            // APPLY BUFF ==============================================================================================
            // =========================================================================================================
            temp.add("\"ApplyBuffToLastSpawnerNoFilterNoRange\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));

            temp.add("\"ApplyBuffToLastSpawnerWithTravelNoFilterNoRange\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                al.add(q=new Property("travelSpeed",Property.INTEGER,this));
                hasWeaponEffects(al);

            temp.add("\"ApplyBuffToSelf\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                effectInfo(al);

            temp.add("\"ApplyBuffToTarget\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                targetFilter(al);
                range(al);
                effectInfo(al);

            temp.add("\"ApplyBuffToTargetNoFilterNoRange\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));

            temp.add("\"ApplyBuffToTargetOnWeaponFired\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                numWeaponClasses(al);
                al.add(q=new Property("passiveWeaponEffectChance",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                targetFilter(al);

            temp.add("\"ApplyBuffToTargetsAtOrbitBody\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                targetFilter(al);
                maxTargetCount(al);
                effectInfo(al);

            temp.add("\"ApplyBuffToTargetsInColumn\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                targetFilter(al);
                al.add(q=new Property("columnRadius",Property.VOID,this));
                doubleLevels(al);
                maxTargetCount(al);
                effectInfo(al);

            temp.add("\"ApplyBuffToTargetsInRadius\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                targetFilter(al);
                range(al);
                maxTargetCount(al);
                effectInfo(al);

            temp.add("\"ApplyBuffToTargetsInRadiusWithChainTravel\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                targetFilter(al);
                range(al);
                maxTargetCount(al);
                al.add(q=new Property("chainDelay",Property.DOUBLE,this));
                hasWeaponEffects(al);

            temp.add("\"ApplyBuffToTargetsInRadiusWithTravel\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));        
                targetFilter(al);
                range(al);
                maxTargetCount(al);
                effectInfo(al);
                al.add(q=new Property("travelSpeed",Property.INTEGER,this));
                al.add(q=new Property("effectStaggerDelay",Property.DOUBLE,this));
                hasWeaponEffects(al);

            temp.add("\"ApplyBuffToTargetsLinked\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                targetFilter(al);
                hasWeaponEffects(al);

            temp.add("\"ApplyBuffToTargetWithEntryVehicles\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));        
                targetFilter(al);
                range(al);
                al.add(q=new Property("entryVehicleType",Property.QUOTED,this));
                al.add(q=new Property("numEntryVehicles",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("travelTime",Property.DOUBLE,this));
                al.add(q=new Property("entryVehicleLaunchInfo",Property.VOID,this));
                effectAttachInfo(al);

            temp.add("\"ApplyBuffToTargetWithTravel\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));        
                targetFilter(al);
                range(al);
                al.add(q=new Property("travelSpeed",Property.INTEGER,this));
                hasWeaponEffects(al);

            temp.add("\"ApplyBuffToTargetWithTravelNoFilterNoRange\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));        
                al.add(q=new Property("travelSpeed",Property.INTEGER,this));
                hasWeaponEffects(al);

            temp.add("\"ApplyOrRemoveBuffToSelf\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                effectInfo(al);
                al.add(q=new Property("toggleStateOnNameStringID",Property.QUOTED,this));
                al.add(q=new Property("toggleStateOnDescStringID",Property.QUOTED,this));

            temp.add("\"ApplyTargettedBuffToSelf\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                targetFilter(al);
                range(al);
                effectInfo(al);

            temp.add("\"ApplyTargettedBuffToSelfNoFilterNoRange\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                effectInfo(al);

            temp.add("\"ApplyTargettedBuffToSelfNoRange\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("buffType",Property.BUFF,this));
                targetFilter(al);
                effectInfo(al);
                
                

            // =========================================================================================================
            // Manipulate World ========================================================================================
            // =========================================================================================================
            temp.add("\"ApplyImpulseFromSpawner\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("impulse",Property.DOUBLE,this));
        
            temp.add("\"ChangePlayerIndexToFirstSpawner\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("isPermanent",Property.BOOLEAN,this));
                al.add(q=new Property("failIfNotEnoughShipSlots",Property.BOOLEAN,this));
                al.add(q=new Property("experiencePercentageToAward",Property.DOUBLE,this));
                
            temp.add("\"ColonizePlanet\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                targetFilter(al);
                range(al);
                al.add(q=new Property("delayUntilColonization",Property.DOUBLE,this));
                al.add(q=new Property("entryVehicleType",Property.QUOTED,this));
                al.add(q=new Property("numEntryVehicles",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("travelTime",Property.DOUBLE,this));
                al.add(q=new Property("entryVehicleLaunchInfo",Property.VOID,this));
                effectAttachInfo(al);
                al.add(q=new Property("afterColonizeBuffType",Property.BUFF,this));
                
            temp.add("\"ConvertDamageToAntiMatter\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                temp0 = new ArrayList<>();
                temp0.add("\"PHYSICAL\"");
                temp0.add("\"ENERGY\"");
                al.add(q=new Property("damageType",Property.FINITE,temp0,this));
                    al0 = new ArrayList<>();
                    q.plugs.add(al0);
                    al0 = new ArrayList<>();
                    q.plugs.add(al0);
                al.add(q=new Property("antiMatterFromDamagePerc",Property.VOID,this));
                doubleLevels(al);

            temp.add("\"CreateClonedFrigate\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("numFrigates",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("impulse",Property.DOUBLE,this));
                al.add(q=new Property("expiryTime",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("spawnFrigateSoundID",Property.QUOTED,this));

            temp.add("\"CreateFrigate\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("frigateType",Property.QUOTED,this));
                al.add(q=new Property("numFrigates",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("matchOwnerDamageState",Property.BOOLEAN,this));
                al.add(q=new Property("impulse",Property.DOUBLE,this));
                al.add(q=new Property("expiryTime",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("spawnFrigateSoundID",Property.QUOTED,this));
                al.add(q=new Property("postSpawnBuff",Property.BUFF,this));

            temp.add("\"CreateFrigateAtTarget\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("frigateType",Property.QUOTED,this));
                al.add(q=new Property("numFrigates",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("impulse",Property.DOUBLE,this));
                al.add(q=new Property("expiryTime",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("spawnFrigateSoundID",Property.QUOTED,this));
                targetFilter(al);
                range(al);

            temp.add("\"CreateIllusionFighters\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("numFighters",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("expiryTime",Property.VOID,this));
                doubleLevels(al);
                effectInfo(al);

            temp.add("\"CreateSquad\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("squadType",Property.QUOTED,this));
                al.add(q=new Property("numSquads",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("expiryTime",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("spawnSquadSoundID",Property.QUOTED,this));

            temp.add("\"DoInterrupt\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);

            temp.add("\"DoInterruptUltimate\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);

            temp.add("\"DoDamage\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("damage",Property.VOID,this));
                doubleLevels(al);
                temp0 = new ArrayList<>();
                temp0.add("\"AFFECTS_SHIELDS_AND_HULL\"");
                temp0.add("\"AFFECTS_ONLY_SHIELDS\"");
                temp0.add("\"AFFECTS_ONLY_HULL\"");
                al.add(q=new Property("damageAffectType",Property.FINITE,temp0,this));
                temp0 = new ArrayList<>();
                temp0.add("\"PHYSICAL\"");
                temp0.add("\"ENERGY\"");
                al.add(q=new Property("damageType",Property.FINITE,temp0,this));
                al.add(q=new Property("isDamageShared",Property.BOOLEAN,this));

            temp.add("\"DoDamagePercOfCurrentHull\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("hullDamagePerc",Property.VOID,this));
                doubleLevels(al);
                temp0 = new ArrayList<>();
                temp0.add("\"AFFECTS_SHIELDS_AND_HULL\"");
                temp0.add("\"AFFECTS_ONLY_SHIELDS\"");
                temp0.add("\"AFFECTS_ONLY_HULL\"");
                al.add(q=new Property("damageAffectType",Property.FINITE,temp0,this));
                temp0 = new ArrayList<>();
                temp0.add("\"PHYSICAL\"");
                temp0.add("\"ENERGY\"");
                al.add(q=new Property("damageType",Property.FINITE,temp0,this));
                al.add(q=new Property("isDamageShared",Property.BOOLEAN,this));

            temp.add("\"DoDamageToPlanet\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("damage",Property.VOID,this));
                doubleLevels(al);
                al.add(q=new Property("populationKilled",Property.VOID,this));
                doubleLevels(al);

            temp.add("\"Explore\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);

            temp.add("\"ForceAttackersToRepickAttackTarget\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);

            temp.add("\"MakeDead\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);

            temp.add("\"MatchTargetVelocity\"");
            al = new ArrayList<>();
            p.plugs.add(al);
                instantActionTriggerType(al);

            temp.add("\"PlayAttachedEffect\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                effectInfo(al);

            temp.add("\"PlayPersistantAttachedEffect\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                effectInfo(al);

            temp.add("\"PlayPersistantBeamEffect\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                hasWeaponEffects(al);

            temp.add("\"PropagateWeaponDamageReceivedToTargetsInRadius\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                targetFilter(al);
                range(al);
                maxTargetCount(al);
                
            temp.add("\"RetaliateBounty\"");
            al = new ArrayList<Property>();
            p.plugs.add(al = new ArrayList<Property>());
                instantActionTriggerType(al);
                al.add(q=new Property("bountyAmount",Property.VOID,this));
                doubleLevels(al);
                
            temp.add("\"RetaliatDamage\"");
            al = new ArrayList<Property>();
            p.plugs.add(al = new ArrayList<Property>());
                instantActionTriggerType(al);
                al.add(q=new Property("damageRetaliationAmount",Property.VOID,this));
                doubleLevels(al);
                
            temp.add("\"RemoveAntiMatter\"");
            al = new ArrayList<Property>();
            p.plugs.add(al = new ArrayList<Property>());
                instantActionTriggerType(al);
                al.add(q=new Property("antiMatter",Property.VOID,this));
                doubleLevels(al);
                
            temp.add("\"RemoveAntiMatterPerc\"");
            al = new ArrayList<Property>();
            p.plugs.add(al = new ArrayList<Property>());
                instantActionTriggerType(al);
                al.add(q=new Property("antiMatter",Property.VOID,this));
                doubleLevels(al);
                
            temp.add("\"RestoreAntiMatter\"");
            al = new ArrayList<Property>();
            p.plugs.add(al = new ArrayList<Property>());
                instantActionTriggerType(al);
                al.add(q=new Property("antiMatter",Property.VOID,this));
                doubleLevels(al);
                
            temp.add("\"RestoreHullPoints\"");
            al = new ArrayList<Property>();
            p.plugs.add(al = new ArrayList<Property>());
                instantActionTriggerType(al);
                al.add(q=new Property("hull",Property.VOID,this));
                doubleLevels(al);
                
            temp.add("\"RestoreShieldPoints\"");
            al = new ArrayList<Property>();
            p.plugs.add(al = new ArrayList<Property>());
                instantActionTriggerType(al);
                al.add(q=new Property("shields",Property.VOID,this));
                doubleLevels(al);
                
            temp.add("\"RestoreHullPointsPerc\"");
            al = new ArrayList<Property>();
            p.plugs.add(al = new ArrayList<Property>());
                instantActionTriggerType(al);
                al.add(q=new Property("hullPerc",Property.VOID,this));
                doubleLevels(al);
            
            temp.add("\"RestoreShieldPointsPerc\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("shieldPerc",Property.VOID,this));
                doubleLevels(al);
            
            temp.add("\"ResurrectCapitalShip\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                doubleLevels(al);
            
            temp.add("\"SetTauntTargetToLastSpawner\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
            
            temp.add("\"SpawnResourceExtractors\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("numExtractors",Property.VOID,this));
                doubleLevels(al);

            temp.add("\"SpawnShipsAtPlanet\"");// 6
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                spawnShips(al);
            
            temp.add("\"StealAntiMatterForFirstSpawner\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("antiMatter",Property.VOID,this));
                doubleLevels(al);
            
            temp.add("\"StealResources\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                temp0 = new ArrayList<>();
                temp0.add("Credits");
                temp0.add("Metal");
                temp0.add("Crystal");
                al.add(q=new Property("resourceToSteal",Property.FINITE,temp0,this));
                    al0=new ArrayList<>();
                    q.plugs.add(al0);
                    al0=new ArrayList<>();
                    q.plugs.add(al0);
                al.add(q=new Property("resourceAmount",Property.VOID,this));
                doubleLevels(al);
            
            temp.add("\"TeleportTowardsMoveTarget\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("teleportDistance",Property.DOUBLE,this));
            
            temp.add("\"TeleportTowardsTarget\"");
            al = new ArrayList<Property>();
            p.plugs.add(al);
                instantActionTriggerType(al);
                al.add(q=new Property("teleportStopOffset",Property.DOUBLE,this));
    }
    
    

}
